home *** CD-ROM | disk | FTP | other *** search
/ Quick PC 61 / Quick PC 61.iso / I386 / NETFX.CAB / InstallSqlState.sql < prev    next >
Encoding:
Text File  |  2003-02-21  |  30.3 KB  |  1,015 lines

  1. /* First uninstall - this section is exactly the same as uninstall.sql */
  2. USE master
  3. GO
  4.  
  5. /* Drop the database containing our sprocs */
  6. IF DB_ID('ASPState') IS NOT NULL BEGIN
  7.     DROP DATABASE ASPState
  8. END
  9. GO
  10.  
  11. /* Drop temporary tables */
  12. IF OBJECT_ID('tempdb..ASPStateTempSessions','U') IS NOT NULL BEGIN
  13.     DROP TABLE tempdb..ASPStateTempSessions
  14. END
  15. GO
  16.  
  17. IF OBJECT_ID('tempdb..ASPStateTempApplications','U') IS NOT NULL BEGIN
  18.     DROP TABLE tempdb..ASPStateTempApplications
  19. END
  20. GO
  21.  
  22. /* Drop the startup procedure */
  23. DECLARE @PROCID int
  24. SET @PROCID = OBJECT_ID('ASPState_Startup') 
  25. IF @PROCID IS NOT NULL AND OBJECTPROPERTY(@PROCID, 'IsProcedure') = 1 BEGIN
  26.     DROP PROCEDURE ASPState_Startup 
  27. END
  28. GO
  29.  
  30. /* Drop the obsolete startup enabler */
  31. DECLARE @PROCID int
  32. SET @PROCID = OBJECT_ID('EnableASPStateStartup') 
  33. IF @PROCID IS NOT NULL AND OBJECTPROPERTY(@PROCID, 'IsProcedure') = 1 BEGIN
  34.     DROP PROCEDURE EnableASPStateStartup
  35. END
  36. GO
  37.  
  38. /* Drop the obsolete startup disabler */
  39. DECLARE @PROCID int
  40. SET @PROCID = OBJECT_ID('DisableASPStateStartup') 
  41. IF @PROCID IS NOT NULL AND OBJECTPROPERTY(@PROCID, 'IsProcedure') = 1 BEGIN
  42.     DROP PROCEDURE DisableASPStateStartup
  43. END
  44. GO
  45.  
  46. /* Drop the ASPState_DeleteExpiredSessions_Job */
  47. DECLARE @JobID BINARY(16)  
  48. SELECT @JobID = job_id     
  49. FROM   msdb.dbo.sysjobs    
  50. WHERE (name = N'ASPState_Job_DeleteExpiredSessions')       
  51. IF (@JobID IS NOT NULL)    
  52. BEGIN  
  53.     -- Check if the job is a multi-server job  
  54.     IF (EXISTS (SELECT  * 
  55.               FROM    msdb.dbo.sysjobservers 
  56.               WHERE   (job_id = @JobID) AND (server_id <> 0))) 
  57.     BEGIN 
  58.         -- There is, so abort the script 
  59.         RAISERROR (N'Unable to import job ''ASPState_Job_DeleteExpiredSessions'' since there is already a multi-server job with this name.', 16, 1) 
  60.     END 
  61.     ELSE 
  62.         -- Delete the [local] job 
  63.         EXECUTE msdb.dbo.sp_delete_job @job_name = N'ASPState_Job_DeleteExpiredSessions' 
  64. END
  65.  
  66. /* Create and populate the ASPState database */
  67. CREATE DATABASE ASPState
  68. GO
  69.  
  70. USE ASPState
  71. GO
  72.  
  73. /* Check to make sure the USE worked.  The CREATE DATABASE may have failed. */
  74. IF DB_NAME()<>'ASPState' BEGIN
  75.     RAISERROR('Error creating state database',20,1)  -- Sev 20 will terminate the connection
  76. END    
  77.  
  78. SET QUOTED_IDENTIFIER OFF 
  79. GO
  80. SET ANSI_NULLS ON 
  81. GO
  82.  
  83. CREATE PROCEDURE DropTempTables
  84. AS
  85.     IF OBJECT_ID('tempdb..ASPStateTempSessions','U') IS NOT NULL BEGIN
  86.         DROP TABLE tempdb..ASPStateTempSessions
  87.     END
  88.  
  89.     IF OBJECT_ID('tempdb..ASPStateTempApplications','U') IS NOT NULL BEGIN
  90.         DROP TABLE tempdb..ASPStateTempApplications
  91.     END
  92.  
  93.     RETURN 0
  94. GO
  95.  
  96. CREATE PROCEDURE GetMajorVersion
  97.     @@ver int output
  98. AS
  99. /* Find out the version */
  100.  
  101. IF OBJECT_ID('tempdb..#AspstateVer') IS NOT NULL BEGIN
  102.     DROP TABLE #AspstateVer
  103. END
  104.  
  105. CREATE TABLE #AspstateVer
  106. (
  107.     c1 INT,
  108.     c2 CHAR(100),
  109.     c3 CHAR(100),
  110.     version CHAR(100)
  111. )
  112.  
  113. INSERT INTO    #AspstateVer
  114. EXEC master..xp_msver ProductVersion
  115.  
  116. DECLARE @version CHAR(100)
  117. DECLARE @dot INT
  118.  
  119. SELECT @version = version FROM #AspstateVer
  120. SELECT @dot = CHARINDEX('.', @version)
  121. SELECT @@ver = CONVERT(INT, SUBSTRING(@version, 1, @dot-1))
  122. GO   
  123.  
  124. /* Find out the version */
  125. DECLARE @ver INT
  126. EXEC GetMajorVersion @@ver=@ver OUTPUT
  127.  
  128. DECLARE @cmd CHAR(8000)
  129.  
  130. IF (@ver >= 8)
  131.     SET @cmd = '
  132.         CREATE PROCEDURE CreateTempTables
  133.         AS
  134.             CREATE TABLE tempdb..ASPStateTempSessions (
  135.                 SessionId           CHAR(32)        NOT NULL PRIMARY KEY,
  136.                 Created             DATETIME        NOT NULL DEFAULT GETUTCDATE(),
  137.                 Expires             DATETIME        NOT NULL,
  138.                 LockDate            DATETIME        NOT NULL,
  139.                 LockDateLocal       DATETIME        NOT NULL,
  140.                 LockCookie          INT             NOT NULL,
  141.                 Timeout             INT             NOT NULL,
  142.                 Locked              BIT             NOT NULL,
  143.                 SessionItemShort    VARBINARY(7000) NULL,
  144.                 SessionItemLong     IMAGE           NULL,
  145.             ) 
  146.  
  147.             CREATE TABLE tempdb..ASPStateTempApplications (
  148.                 AppId               INT             NOT NULL IDENTITY PRIMARY KEY,
  149.                 AppName             CHAR(280)       NOT NULL,
  150.             ) 
  151.  
  152.             CREATE NONCLUSTERED INDEX Index_AppName ON tempdb..ASPStateTempApplications(AppName)
  153.  
  154.             RETURN 0'
  155. ELSE
  156.     SET @cmd = '
  157.         CREATE PROCEDURE CreateTempTables
  158.         AS
  159.             CREATE TABLE tempdb..ASPStateTempSessions (
  160.                 SessionId           CHAR(32)        NOT NULL PRIMARY KEY,
  161.                 Created             DATETIME        NOT NULL DEFAULT GETDATE(),
  162.                 Expires             DATETIME        NOT NULL,
  163.                 LockDate            DATETIME        NOT NULL,
  164.                 LockCookie          INT             NOT NULL,
  165.                 Timeout             INT             NOT NULL,
  166.                 Locked              BIT             NOT NULL,
  167.                 SessionItemShort    VARBINARY(7000) NULL,
  168.                 SessionItemLong     IMAGE           NULL,
  169.             ) 
  170.  
  171.             CREATE TABLE tempdb..ASPStateTempApplications (
  172.                 AppId               INT             NOT NULL IDENTITY PRIMARY KEY,
  173.                 AppName             CHAR(280)       NOT NULL,
  174.             ) 
  175.  
  176.             CREATE NONCLUSTERED INDEX Index_AppName ON tempdb..ASPStateTempApplications(AppName)
  177.  
  178.             RETURN 0'
  179.  
  180. EXEC (@cmd)
  181. GO   
  182.  
  183. CREATE PROCEDURE ResetData
  184. AS
  185.     EXECUTE DropTempTables
  186.     EXECUTE CreateTempTables
  187.     RETURN 0
  188. GO
  189.    
  190. EXECUTE sp_addtype tSessionId, 'CHAR(32)',  'NOT NULL'
  191. GO
  192.  
  193. EXECUTE sp_addtype tAppName, 'VARCHAR(280)', 'NOT NULL'
  194. GO
  195.  
  196. EXECUTE sp_addtype tSessionItemShort, 'VARBINARY(7000)'
  197. GO
  198.  
  199. EXECUTE sp_addtype tSessionItemLong, 'IMAGE'
  200. GO
  201.  
  202. EXECUTE sp_addtype tTextPtr, 'VARBINARY(16)'
  203. GO
  204.  
  205. CREATE PROCEDURE TempGetAppID
  206.     @appName    tAppName,
  207.     @appId      INT OUTPUT
  208. AS
  209.     SELECT @appId = AppId
  210.     FROM tempdb..ASPStateTempApplications
  211.     WHERE AppName = @appName
  212.  
  213.     IF @appId IS NULL BEGIN
  214.         INSERT tempdb..ASPStateTempApplications
  215.             (AppName)
  216.         VALUES
  217.             (@appName)
  218.  
  219.         SELECT @appId = AppId
  220.         FROM tempdb..ASPStateTempApplications
  221.         WHERE AppName = @appName
  222.     END
  223.  
  224.     RETURN 0
  225. GO
  226.  
  227. /* Find out the version */
  228. DECLARE @ver INT
  229. EXEC GetMajorVersion @@ver=@ver OUTPUT
  230. DECLARE @cmd CHAR(8000)
  231. IF (@ver >= 8)
  232.     SET @cmd = '
  233.         CREATE PROCEDURE TempGetStateItem
  234.             @id         tSessionId,
  235.             @itemShort  tSessionItemShort OUTPUT,
  236.             @locked     BIT OUTPUT,
  237.             @lockDate   DATETIME OUTPUT,
  238.             @lockCookie INT OUTPUT
  239.         AS
  240.             DECLARE @textptr AS tTextPtr
  241.             DECLARE @length AS INT
  242.             DECLARE @now as DATETIME
  243.             SET @now = GETUTCDATE()
  244.  
  245.             UPDATE tempdb..ASPStateTempSessions
  246.             SET Expires = DATEADD(n, Timeout, @now), 
  247.                 @locked = Locked,
  248.                 @lockDate = LockDateLocal,
  249.                 @lockCookie = LockCookie,
  250.                 @itemShort = CASE @locked
  251.                     WHEN 0 THEN SessionItemShort
  252.                     ELSE NULL
  253.                     END,
  254.                 @textptr = CASE @locked
  255.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  256.                     ELSE NULL
  257.                     END,
  258.                 @length = CASE @locked
  259.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  260.                     ELSE NULL
  261.                     END
  262.             WHERE SessionId = @id
  263.             IF @length IS NOT NULL BEGIN
  264.                 READTEXT tempdb..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  265.             END
  266.  
  267.             RETURN 0'
  268. ELSE
  269.     SET @cmd = '
  270.         CREATE PROCEDURE TempGetStateItem
  271.             @id         tSessionId,
  272.             @itemShort  tSessionItemShort OUTPUT,
  273.             @locked     BIT OUTPUT,
  274.             @lockDate   DATETIME OUTPUT,
  275.             @lockCookie INT OUTPUT
  276.         AS
  277.             DECLARE @textptr AS tTextPtr
  278.             DECLARE @length AS INT
  279.             DECLARE @now as DATETIME
  280.             SET @now = GETDATE()
  281.  
  282.             UPDATE tempdb..ASPStateTempSessions
  283.             SET Expires = DATEADD(n, Timeout, @now), 
  284.                 @locked = Locked,
  285.                 @lockDate = LockDate,
  286.                 @lockCookie = LockCookie,
  287.                 @itemShort = CASE @locked
  288.                     WHEN 0 THEN SessionItemShort
  289.                     ELSE NULL
  290.                     END,
  291.                 @textptr = CASE @locked
  292.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  293.                     ELSE NULL
  294.                     END,
  295.                 @length = CASE @locked
  296.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  297.                     ELSE NULL
  298.                     END
  299.             WHERE SessionId = @id
  300.             IF @length IS NOT NULL BEGIN
  301.                 READTEXT tempdb..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  302.             END
  303.  
  304.             RETURN 0'
  305.     
  306. EXEC (@cmd)    
  307. GO
  308.  
  309. DECLARE @ver INT
  310. EXEC GetMajorVersion @@ver=@ver OUTPUT
  311. DECLARE @cmd CHAR(8000)
  312. IF (@ver >= 8)
  313.     SET @cmd = '
  314.         CREATE PROCEDURE TempGetStateItem2
  315.             @id         tSessionId,
  316.             @itemShort  tSessionItemShort OUTPUT,
  317.             @locked     BIT OUTPUT,
  318.             @lockAge    INT OUTPUT,
  319.             @lockCookie INT OUTPUT
  320.         AS
  321.             DECLARE @textptr AS tTextPtr
  322.             DECLARE @length AS INT
  323.             DECLARE @now as DATETIME
  324.             SET @now = GETUTCDATE()
  325.  
  326.             UPDATE tempdb..ASPStateTempSessions
  327.             SET Expires = DATEADD(n, Timeout, @now), 
  328.                 @locked = Locked,
  329.                 @lockAge = DATEDIFF(second, LockDate, @now),
  330.                 @lockCookie = LockCookie,
  331.                 @itemShort = CASE @locked
  332.                     WHEN 0 THEN SessionItemShort
  333.                     ELSE NULL
  334.                     END,
  335.                 @textptr = CASE @locked
  336.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  337.                     ELSE NULL
  338.                     END,
  339.                 @length = CASE @locked
  340.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  341.                     ELSE NULL
  342.                     END
  343.             WHERE SessionId = @id
  344.             IF @length IS NOT NULL BEGIN
  345.                 READTEXT tempdb..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  346.             END
  347.  
  348.             RETURN 0'
  349.  
  350. EXEC (@cmd)    
  351. GO
  352.             
  353.  
  354. DECLARE @ver INT
  355. EXEC GetMajorVersion @@ver=@ver OUTPUT
  356. DECLARE @cmd CHAR(8000)
  357. IF (@ver >= 8)
  358.     SET @cmd = '
  359.         CREATE PROCEDURE TempGetStateItemExclusive
  360.             @id         tSessionId,
  361.             @itemShort  tSessionItemShort OUTPUT,
  362.             @locked     BIT OUTPUT,
  363.             @lockDate   DATETIME OUTPUT,
  364.             @lockCookie INT OUTPUT
  365.         AS
  366.             DECLARE @textptr AS tTextPtr
  367.             DECLARE @length AS INT
  368.             DECLARE @now as DATETIME
  369.             DECLARE @nowLocal as DATETIME
  370.  
  371.             SET @now = GETUTCDATE()
  372.             SET @nowLocal = GETDATE()
  373.             
  374.             UPDATE tempdb..ASPStateTempSessions
  375.             SET Expires = DATEADD(n, Timeout, @now), 
  376.                 LockDate = CASE Locked
  377.                     WHEN 0 THEN @now
  378.                     ELSE LockDate
  379.                     END,
  380.                 @lockDate = LockDateLocal = CASE Locked
  381.                     WHEN 0 THEN @nowLocal
  382.                     ELSE LockDateLocal
  383.                     END,
  384.                 @lockCookie = LockCookie = CASE Locked
  385.                     WHEN 0 THEN LockCookie + 1
  386.                     ELSE LockCookie
  387.                     END,
  388.                 @itemShort = CASE Locked
  389.                     WHEN 0 THEN SessionItemShort
  390.                     ELSE NULL
  391.                     END,
  392.                 @textptr = CASE Locked
  393.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  394.                     ELSE NULL
  395.                     END,
  396.                 @length = CASE Locked
  397.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  398.                     ELSE NULL
  399.                     END,
  400.                 @locked = Locked,
  401.                 Locked = 1
  402.             WHERE SessionId = @id
  403.             IF @length IS NOT NULL BEGIN
  404.                 READTEXT tempdb..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  405.             END
  406.  
  407.             RETURN 0'
  408. ELSE
  409.     SET @cmd = '
  410.         CREATE PROCEDURE TempGetStateItemExclusive
  411.             @id         tSessionId,
  412.             @itemShort  tSessionItemShort OUTPUT,
  413.             @locked     BIT OUTPUT,
  414.             @lockDate   DATETIME OUTPUT,
  415.             @lockCookie INT OUTPUT
  416.         AS
  417.             DECLARE @textptr AS tTextPtr
  418.             DECLARE @length AS INT
  419.             DECLARE @now as DATETIME
  420.  
  421.             SET @now = GETDATE()
  422.             UPDATE tempdb..ASPStateTempSessions
  423.             SET Expires = DATEADD(n, Timeout, @now), 
  424.                 @lockDate = LockDate = CASE Locked
  425.                     WHEN 0 THEN @now
  426.                     ELSE LockDate
  427.                     END,
  428.                 @lockCookie = LockCookie = CASE Locked
  429.                     WHEN 0 THEN LockCookie + 1
  430.                     ELSE LockCookie
  431.                     END,
  432.                 @itemShort = CASE Locked
  433.                     WHEN 0 THEN SessionItemShort
  434.                     ELSE NULL
  435.                     END,
  436.                 @textptr = CASE Locked
  437.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  438.                     ELSE NULL
  439.                     END,
  440.                 @length = CASE Locked
  441.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  442.                     ELSE NULL
  443.                     END,
  444.                 @locked = Locked,
  445.                 Locked = 1
  446.             WHERE SessionId = @id
  447.             IF @length IS NOT NULL BEGIN
  448.                 READTEXT tempdb..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  449.             END
  450.  
  451.             RETURN 0'    
  452.  
  453. EXEC (@cmd)    
  454. GO
  455.  
  456.  
  457. DECLARE @ver INT
  458. EXEC GetMajorVersion @@ver=@ver OUTPUT
  459. DECLARE @cmd CHAR(8000)
  460. IF (@ver >= 8)
  461.     SET @cmd = '
  462.         CREATE PROCEDURE TempGetStateItemExclusive2
  463.             @id         tSessionId,
  464.             @itemShort  tSessionItemShort OUTPUT,
  465.             @locked     BIT OUTPUT,
  466.             @lockAge    INT OUTPUT,
  467.             @lockCookie INT OUTPUT
  468.         AS
  469.             DECLARE @textptr AS tTextPtr
  470.             DECLARE @length AS INT
  471.             DECLARE @now as DATETIME
  472.             DECLARE @nowLocal as DATETIME
  473.  
  474.             SET @now = GETUTCDATE()
  475.             SET @nowLocal = GETDATE()
  476.             
  477.             UPDATE tempdb..ASPStateTempSessions
  478.             SET Expires = DATEADD(n, Timeout, @now), 
  479.                 LockDate = CASE Locked
  480.                     WHEN 0 THEN @now
  481.                     ELSE LockDate
  482.                     END,
  483.                 LockDateLocal = CASE Locked
  484.                     WHEN 0 THEN @nowLocal
  485.                     ELSE LockDateLocal
  486.                     END,
  487.                 @lockAge = CASE Locked
  488.                     WHEN 0 THEN 0
  489.                     ELSE DATEDIFF(second, LockDate, @now)
  490.                     END,
  491.                 @lockCookie = LockCookie = CASE Locked
  492.                     WHEN 0 THEN LockCookie + 1
  493.                     ELSE LockCookie
  494.                     END,
  495.                 @itemShort = CASE Locked
  496.                     WHEN 0 THEN SessionItemShort
  497.                     ELSE NULL
  498.                     END,
  499.                 @textptr = CASE Locked
  500.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  501.                     ELSE NULL
  502.                     END,
  503.                 @length = CASE Locked
  504.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  505.                     ELSE NULL
  506.                     END,
  507.                 @locked = Locked,
  508.                 Locked = 1
  509.             WHERE SessionId = @id
  510.             IF @length IS NOT NULL BEGIN
  511.                 READTEXT tempdb..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  512.             END
  513.  
  514.             RETURN 0'
  515.  
  516. EXEC (@cmd)    
  517. GO
  518.  
  519.  
  520. DECLARE @ver INT
  521. EXEC GetMajorVersion @@ver=@ver OUTPUT
  522. DECLARE @cmd CHAR(8000)
  523. IF (@ver >= 8)
  524.     SET @cmd = '
  525.         CREATE PROCEDURE TempReleaseStateItemExclusive
  526.             @id         tSessionId,
  527.             @lockCookie INT
  528.         AS
  529.             UPDATE tempdb..ASPStateTempSessions
  530.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  531.                 Locked = 0
  532.             WHERE SessionId = @id AND LockCookie = @lockCookie
  533.  
  534.             RETURN 0'
  535. ELSE
  536.     SET @cmd = '
  537.         CREATE PROCEDURE TempReleaseStateItemExclusive
  538.             @id         tSessionId,
  539.             @lockCookie INT
  540.         AS
  541.             UPDATE tempdb..ASPStateTempSessions
  542.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  543.                 Locked = 0
  544.             WHERE SessionId = @id AND LockCookie = @lockCookie
  545.  
  546.             RETURN 0'
  547.  
  548. EXEC (@cmd)    
  549. GO
  550.  
  551.  
  552. DECLARE @ver INT
  553. EXEC GetMajorVersion @@ver=@ver OUTPUT
  554. DECLARE @cmd CHAR(8000)
  555. IF (@ver >= 8)
  556.     SET @cmd = '
  557.         CREATE PROCEDURE TempInsertStateItemShort
  558.             @id         tSessionId,
  559.             @itemShort  tSessionItemShort,
  560.             @timeout    INT
  561.         AS    
  562.  
  563.             DECLARE @now as DATETIME
  564.             DECLARE @nowLocal as DATETIME
  565.             
  566.             SET @now = GETUTCDATE()
  567.             SET @nowLocal = GETDATE()
  568.  
  569.             INSERT tempdb..ASPStateTempSessions 
  570.                 (SessionId, 
  571.                  SessionItemShort, 
  572.                  Timeout, 
  573.                  Expires, 
  574.                  Locked, 
  575.                  LockDate,
  576.                  LockDateLocal,
  577.                  LockCookie) 
  578.             VALUES 
  579.                 (@id, 
  580.                  @itemShort, 
  581.                  @timeout, 
  582.                  DATEADD(n, @timeout, @now), 
  583.                  0, 
  584.                  @now,
  585.                  @nowLocal,
  586.                  1)
  587.  
  588.             RETURN 0'
  589. ELSE
  590.     SET @cmd = '
  591.         CREATE PROCEDURE TempInsertStateItemShort
  592.             @id         tSessionId,
  593.             @itemShort  tSessionItemShort,
  594.             @timeout    INT
  595.         AS    
  596.  
  597.             DECLARE @now as DATETIME
  598.             SET @now = GETDATE()
  599.  
  600.             INSERT tempdb..ASPStateTempSessions 
  601.                 (SessionId, 
  602.                  SessionItemShort, 
  603.                  Timeout, 
  604.                  Expires, 
  605.                  Locked, 
  606.                  LockDate,
  607.                  LockCookie) 
  608.             VALUES 
  609.                 (@id, 
  610.                  @itemShort, 
  611.                  @timeout, 
  612.                  DATEADD(n, @timeout, @now), 
  613.                  0, 
  614.                  @now,
  615.                  1)
  616.  
  617.             RETURN 0'
  618.  
  619. EXEC (@cmd)    
  620. GO
  621.  
  622.  
  623. DECLARE @ver INT
  624. EXEC GetMajorVersion @@ver=@ver OUTPUT
  625. DECLARE @cmd CHAR(8000)
  626. IF (@ver >= 8)
  627.     SET @cmd = '
  628.         CREATE PROCEDURE TempInsertStateItemLong
  629.             @id         tSessionId,
  630.             @itemLong   tSessionItemLong,
  631.             @timeout    INT
  632.         AS    
  633.             DECLARE @now as DATETIME
  634.             DECLARE @nowLocal as DATETIME
  635.             
  636.             SET @now = GETUTCDATE()
  637.             SET @nowLocal = GETDATE()
  638.  
  639.             INSERT tempdb..ASPStateTempSessions 
  640.                 (SessionId, 
  641.                  SessionItemLong, 
  642.                  Timeout, 
  643.                  Expires, 
  644.                  Locked, 
  645.                  LockDate,
  646.                  LockDateLocal,
  647.                  LockCookie) 
  648.             VALUES 
  649.                 (@id, 
  650.                  @itemLong, 
  651.                  @timeout, 
  652.                  DATEADD(n, @timeout, @now), 
  653.                  0, 
  654.                  @now,
  655.                  @nowLocal,
  656.                  1)
  657.  
  658.             RETURN 0'
  659. ELSE
  660.     SET @cmd = '
  661.         CREATE PROCEDURE TempInsertStateItemLong
  662.             @id         tSessionId,
  663.             @itemLong   tSessionItemLong,
  664.             @timeout    INT
  665.         AS    
  666.             DECLARE @now as DATETIME
  667.             SET @now = GETDATE()
  668.  
  669.             INSERT tempdb..ASPStateTempSessions 
  670.                 (SessionId, 
  671.                  SessionItemLong, 
  672.                  Timeout, 
  673.                  Expires, 
  674.                  Locked, 
  675.                  LockDate,
  676.                  LockCookie) 
  677.             VALUES 
  678.                 (@id, 
  679.                  @itemLong, 
  680.                  @timeout, 
  681.                  DATEADD(n, @timeout, @now), 
  682.                  0, 
  683.                  @now,
  684.                  1)
  685.  
  686.             RETURN 0'
  687.  
  688. EXEC (@cmd)    
  689. GO
  690.  
  691.  
  692. DECLARE @ver INT
  693. EXEC GetMajorVersion @@ver=@ver OUTPUT
  694. DECLARE @cmd CHAR(8000)
  695. IF (@ver >= 8)
  696.     SET @cmd = '
  697.         CREATE PROCEDURE TempUpdateStateItemShort
  698.             @id         tSessionId,
  699.             @itemShort  tSessionItemShort,
  700.             @timeout    INT,
  701.             @lockCookie INT
  702.         AS    
  703.             UPDATE tempdb..ASPStateTempSessions
  704.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  705.                 SessionItemShort = @itemShort, 
  706.                 Timeout = @timeout,
  707.                 Locked = 0
  708.             WHERE SessionId = @id AND LockCookie = @lockCookie
  709.  
  710.             RETURN 0'
  711. ELSE
  712.     SET @cmd = '
  713.         CREATE PROCEDURE TempUpdateStateItemShort
  714.             @id         tSessionId,
  715.             @itemShort  tSessionItemShort,
  716.             @timeout    INT,
  717.             @lockCookie INT
  718.         AS    
  719.             UPDATE tempdb..ASPStateTempSessions
  720.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  721.                 SessionItemShort = @itemShort, 
  722.                 Timeout = @timeout,
  723.                 Locked = 0
  724.             WHERE SessionId = @id AND LockCookie = @lockCookie
  725.  
  726.             RETURN 0'
  727.  
  728. EXEC (@cmd)    
  729. GO
  730.  
  731.  
  732. DECLARE @ver INT
  733. EXEC GetMajorVersion @@ver=@ver OUTPUT
  734. DECLARE @cmd CHAR(8000)
  735. IF (@ver >= 8)
  736.     SET @cmd = '
  737.         CREATE PROCEDURE TempUpdateStateItemShortNullLong
  738.             @id         tSessionId,
  739.             @itemShort  tSessionItemShort,
  740.             @timeout    INT,
  741.             @lockCookie INT
  742.         AS    
  743.             UPDATE tempdb..ASPStateTempSessions
  744.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  745.                 SessionItemShort = @itemShort, 
  746.                 SessionItemLong = NULL, 
  747.                 Timeout = @timeout,
  748.                 Locked = 0
  749.             WHERE SessionId = @id AND LockCookie = @lockCookie
  750.  
  751.             RETURN 0'
  752. ELSE
  753.     SET @cmd = '
  754.         CREATE PROCEDURE TempUpdateStateItemShortNullLong
  755.             @id         tSessionId,
  756.             @itemShort  tSessionItemShort,
  757.             @timeout    INT,
  758.             @lockCookie INT
  759.         AS    
  760.             UPDATE tempdb..ASPStateTempSessions
  761.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  762.                 SessionItemShort = @itemShort, 
  763.                 SessionItemLong = NULL, 
  764.                 Timeout = @timeout,
  765.                 Locked = 0
  766.             WHERE SessionId = @id AND LockCookie = @lockCookie
  767.  
  768.             RETURN 0'
  769.  
  770. EXEC (@cmd)    
  771. GO
  772.  
  773.  
  774. DECLARE @ver INT
  775. EXEC GetMajorVersion @@ver=@ver OUTPUT
  776. DECLARE @cmd CHAR(8000)
  777. IF (@ver >= 8)
  778.     SET @cmd = '
  779.         CREATE PROCEDURE TempUpdateStateItemLong
  780.             @id         tSessionId,
  781.             @itemLong   tSessionItemLong,
  782.             @timeout    INT,
  783.             @lockCookie INT
  784.         AS    
  785.             UPDATE tempdb..ASPStateTempSessions
  786.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  787.                 SessionItemLong = @itemLong,
  788.                 Timeout = @timeout,
  789.                 Locked = 0
  790.             WHERE SessionId = @id AND LockCookie = @lockCookie
  791.  
  792.             RETURN 0'
  793. ELSE
  794.     SET @cmd = '
  795.         CREATE PROCEDURE TempUpdateStateItemLong
  796.             @id         tSessionId,
  797.             @itemLong   tSessionItemLong,
  798.             @timeout    INT,
  799.             @lockCookie INT
  800.         AS    
  801.             UPDATE tempdb..ASPStateTempSessions
  802.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  803.                 SessionItemLong = @itemLong,
  804.                 Timeout = @timeout,
  805.                 Locked = 0
  806.             WHERE SessionId = @id AND LockCookie = @lockCookie
  807.  
  808.             RETURN 0'
  809.  
  810. EXEC (@cmd)            
  811. GO
  812.  
  813.  
  814. DECLARE @ver INT
  815. EXEC GetMajorVersion @@ver=@ver OUTPUT
  816. DECLARE @cmd CHAR(8000)
  817. IF (@ver >= 8)
  818.     SET @cmd = '
  819.         CREATE PROCEDURE TempUpdateStateItemLongNullShort
  820.             @id         tSessionId,
  821.             @itemLong   tSessionItemLong,
  822.             @timeout    INT,
  823.             @lockCookie INT
  824.         AS    
  825.             UPDATE tempdb..ASPStateTempSessions
  826.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  827.                 SessionItemLong = @itemLong, 
  828.                 SessionItemShort = NULL,
  829.                 Timeout = @timeout,
  830.                 Locked = 0
  831.             WHERE SessionId = @id AND LockCookie = @lockCookie
  832.  
  833.             RETURN 0'
  834. ELSE
  835.     SET @cmd = '
  836.     CREATE PROCEDURE TempUpdateStateItemLongNullShort
  837.         @id         tSessionId,
  838.         @itemLong   tSessionItemLong,
  839.         @timeout    INT,
  840.         @lockCookie INT
  841.     AS    
  842.         UPDATE tempdb..ASPStateTempSessions
  843.         SET Expires = DATEADD(n, Timeout, GETDATE()), 
  844.             SessionItemLong = @itemLong, 
  845.             SessionItemShort = NULL,
  846.             Timeout = @timeout,
  847.             Locked = 0
  848.         WHERE SessionId = @id AND LockCookie = @lockCookie
  849.  
  850.         RETURN 0'
  851.  
  852. EXEC (@cmd)            
  853. GO
  854.  
  855. CREATE PROCEDURE TempRemoveStateItem
  856.     @id     tSessionId,
  857.     @lockCookie INT
  858. AS
  859.     DELETE tempdb..ASPStateTempSessions
  860.     WHERE SessionId = @id AND LockCookie = @lockCookie
  861.     RETURN 0
  862. GO
  863.             
  864. DECLARE @ver INT
  865. EXEC GetMajorVersion @@ver=@ver OUTPUT
  866. DECLARE @cmd CHAR(8000)
  867. IF (@ver >= 8)
  868.     SET @cmd = '
  869.         CREATE PROCEDURE TempResetTimeout
  870.             @id     tSessionId
  871.         AS
  872.             UPDATE tempdb..ASPStateTempSessions
  873.             SET Expires = DATEADD(n, Timeout, GETUTCDATE())
  874.             WHERE SessionId = @id
  875.             RETURN 0'
  876. ELSE
  877.     SET @cmd = '
  878.         CREATE PROCEDURE TempResetTimeout
  879.             @id     tSessionId
  880.         AS
  881.             UPDATE tempdb..ASPStateTempSessions
  882.             SET Expires = DATEADD(n, Timeout, GETDATE())
  883.             WHERE SessionId = @id
  884.             RETURN 0'
  885.  
  886. EXEC (@cmd)            
  887. GO
  888.  
  889.             
  890. DECLARE @ver INT
  891. EXEC GetMajorVersion @@ver=@ver OUTPUT
  892. DECLARE @cmd CHAR(8000)
  893. IF (@ver >= 8)
  894.     SET @cmd = '
  895.         CREATE PROCEDURE DeleteExpiredSessions
  896.         AS
  897.             DECLARE @now DATETIME
  898.             SET @now = GETUTCDATE()
  899.  
  900.             DELETE tempdb..ASPStateTempSessions
  901.             WHERE Expires < @now
  902.  
  903.             RETURN 0'
  904. ELSE
  905.     SET @cmd = '
  906.         CREATE PROCEDURE DeleteExpiredSessions
  907.         AS
  908.             DECLARE @now DATETIME
  909.             SET @now = GETDATE()
  910.  
  911.             DELETE tempdb..ASPStateTempSessions
  912.             WHERE Expires < @now
  913.  
  914.             RETURN 0'
  915.  
  916. EXEC (@cmd)            
  917. GO
  918.             
  919. EXECUTE CreateTempTables
  920. GO
  921.  
  922. /* Create the startup procedure */
  923. USE master
  924. GO
  925.  
  926. CREATE PROCEDURE ASPState_Startup 
  927. AS
  928.     EXECUTE ASPState..CreateTempTables
  929.  
  930.     RETURN 0
  931. GO      
  932.  
  933. EXECUTE sp_procoption @ProcName='ASPState_Startup', @OptionName='startup', @OptionValue='true'
  934.  
  935. /* Create the job to delete expired sessions */
  936. BEGIN TRANSACTION            
  937.     DECLARE @JobID BINARY(16)  
  938.     DECLARE @ReturnCode INT    
  939.     SELECT @ReturnCode = 0     
  940.  
  941.     -- Add job category
  942.     IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1 
  943.         EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
  944.  
  945.     -- Add the job
  946.     EXECUTE @ReturnCode = msdb.dbo.sp_add_job 
  947.             @job_id = @JobID OUTPUT, 
  948.             @job_name = N'ASPState_Job_DeleteExpiredSessions', 
  949.             @owner_login_name = NULL, 
  950.             @description = N'Deletes expired sessions from the session state database.', 
  951.             @category_name = N'[Uncategorized (Local)]', 
  952.             @enabled = 1, 
  953.             @notify_level_email = 0, 
  954.             @notify_level_page = 0, 
  955.             @notify_level_netsend = 0, 
  956.             @notify_level_eventlog = 0, 
  957.             @delete_level= 0
  958.  
  959.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  960.     
  961.     -- Add the job steps
  962.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep 
  963.             @job_id = @JobID,
  964.             @step_id = 1, 
  965.             @step_name = N'ASPState_JobStep_DeleteExpiredSessions', 
  966.             @command = N'EXECUTE DeleteExpiredSessions', 
  967.             @database_name = N'ASPState', 
  968.             @server = N'', 
  969.             @database_user_name = N'', 
  970.             @subsystem = N'TSQL', 
  971.             @cmdexec_success_code = 0, 
  972.             @flags = 0, 
  973.             @retry_attempts = 0, 
  974.             @retry_interval = 1, 
  975.             @output_file_name = N'', 
  976.             @on_success_step_id = 0, 
  977.             @on_success_action = 1, 
  978.             @on_fail_step_id = 0, 
  979.             @on_fail_action = 2
  980.  
  981.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  982.  
  983.     EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1 
  984.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  985.     
  986.     -- Add the job schedules
  987.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule 
  988.             @job_id = @JobID, 
  989.             @name = N'ASPState_JobSchedule_DeleteExpiredSessions', 
  990.             @enabled = 1, 
  991.             @freq_type = 4,     
  992.             @active_start_date = 20001016, 
  993.             @active_start_time = 0, 
  994.             @freq_interval = 1, 
  995.             @freq_subday_type = 4, 
  996.             @freq_subday_interval = 1, 
  997.             @freq_relative_interval = 0, 
  998.             @freq_recurrence_factor = 0, 
  999.             @active_end_date = 99991231, 
  1000.             @active_end_time = 235959
  1001.  
  1002.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1003.     
  1004.     -- Add the Target Servers
  1005.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)' 
  1006.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1007.     
  1008.     COMMIT TRANSACTION          
  1009.     GOTO   EndSave              
  1010. QuitWithRollback:
  1011.     IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION 
  1012. EndSave: 
  1013. GO
  1014.  
  1015.